/**
 *观察某个对象的所有属性
 *
 * @param {*} obj
 */
function observe (obj) {
  for (let key in obj) {
    let internalValue = obj[key]
    // 使用set,防止重复添加
    let funs = new Set()
    Object.defineProperty(obj, key, {
      get: function () {
        //依赖收集 记录：是哪个函数在用我
        if (window.__fun) {
          funs.add(window.__fun)
        }
        return internalValue
      },
      set: function (val) {
        //派发更新 运行：执行用我的函数
        internalValue = val
        funs.forEach(item => {
          item()
        })
      }
    })
  }
}

// let a = [1, 2, 3, 3, 5, 7, 7]
// let b = [...new Set(a)]
// console.log(b)

// let c = new Set()
// let as= { name: 'tom' }
// c.add(as)
// c.add(as)
// // c.add({ name: 'tom' })
// // c.add({ name: 'tom' })
// c.add({ age: 18 })
// console.log(c);
// console.log(Array.from(c));
// c.forEach(item => {
//   console.log(item)
// })
